﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AttackSense : MonoBehaviour
{
    private static AttackSense instance;
    public static AttackSense Instance
    {
        get
        {
            if (instance == null)
                instance = FindObjectOfType<AttackSense>(); // 查找当前场景中的 AttackSense 实例
            return instance;
        }
    }

    private bool isShake; // 是否正在进行摄像机震动

    // 暂停游戏一段时间
    public void HitPause(int duration)
    {
        StartCoroutine(Pause(duration));
    }

    // 使用协程实现暂停功能
    IEnumerator Pause(int duration)
    {
        float pauseTime = duration / 60f; // 将帧数转换为实际暂停时间
        Time.timeScale = 0.2f; // 将游戏时间缩放设为0.2
        yield return new WaitForSecondsRealtime(pauseTime); // 等待指定的暂停时间
        Time.timeScale = 1; // 恢复游戏时间正常
    }

    // 触发摄像机震动效果
    public void CameraShake(float duration, float strength)
    {
        if (!isShake) // 如果当前没有进行震动
            StartCoroutine(Shake(duration, strength));
    }

    // 使用协程实现摄像机震动效果
    IEnumerator Shake(float duration, float strength)
    {
        isShake = true; // 标记正在进行震动
        Transform camera = Camera.main.transform; // 获取主摄像机的 Transform 组件
        Vector3 startPosition = camera.position; // 记录摄像机震动前的初始位置

        while (duration > 0)
        {
            // 将摄像机位置随机偏移一定范围来模拟震动效果
            camera.position = Random.insideUnitSphere * strength + startPosition;
            duration -= Time.deltaTime; // 每帧减去时间
            yield return null; // 等待下一帧
        }
        
        camera.position = startPosition; // 震动结束后将摄像机位置恢复到初始位置
        isShake = false; // 结束震动状态
    }
}
